<?php

/*
 * Роутер.
 * Имеет один публичный метод - execute
 * Ему передается URI и конфиг роутинга, его задача - 
 * определить, имеет ли смысл эта пара и вернуть результат
 */

namespace T4;

class Router {

	/**
	 *
	 * @param string $uri URI
	 * @param Config $routing Конфиг роутинга
	 * @return T4\Standard Результат обработки, пусто если соответствия не найдено
	 */
	public static function execute($uri, Config $routing) {

		$result = new Standard();

		foreach ($routing as $route) {

			$rule = trim((string) $route->rule);

			if (preg_match('@' . $rule . '@i', $uri, $matches)) {

				$result->controller = (string) $route->controller;
				$result->action = (string) $route->action;

				if (!empty($route->parameters)) {

					$result->parameters = new Standard();
					if ( isset($route->parameters) ) {
						foreach ( $route->parameters as $name => $value ) {
							$result->parameters->{$name} =
									preg_replace_callback(
									'/(\$([1-9]+[0-9]*))/', function ($found) use ($matches) {
										return str_replace($found[1], $matches[$found[2]], $found[1]);
									}, (string) $value
							);
						}
					}
					
				}

				break;
				
			}
			
		}

		return $result;
		
	}

}